dados = read_csv(
    here::here("data/participation-per-country.csv"),
    col_types = cols(
        .default = col_double(),
        site = col_character(),
        country = col_character(),
        geo = col_character(),
        four_regions = col_character(),
        eight_regions = col_character(),
        six_regions = col_character(),
        `World bank income group 2017` = col_character()
    )
) %>% 
    filter(usuarios > 200)
glimpse(dados)
## Observations: 121
## Variables: 21
## $ site                           <chr> "StackOverflow", "StackOverflow", "S...
## $ country                        <chr> "Argentina", "Australia", "Austria",...
## $ PDI                            <dbl> 49, 36, 11, 80, 65, 69, 70, 39, 63, ...
## $ IDV                            <dbl> 46, 90, 55, 20, 75, 38, 30, 80, 23, ...
## $ MAS                            <dbl> 56, 61, 79, 55, 54, 49, 40, 52, 28, ...
## $ UAI                            <dbl> 86, 51, 70, 60, 94, 76, 85, 48, 86, ...
## $ usuarios                       <dbl> 2798, 12313, 2518, 2558, 4275, 10717...
## $ responderam_prop               <dbl> 0.5357398, 0.6133355, 0.6310564, 0.3...
## $ perguntaram_prop               <dbl> 0.5210865, 0.5897832, 0.5933280, 0.4...
## $ editaram_prop                  <dbl> 0.09256612, 0.14699911, 0.14932486, ...
## $ comentaram_prop                <dbl> 0.25339528, 0.33395598, 0.35027800, ...
## $ GNI                            <dbl> NA, 59570, 48160, 840, 44990, 11630,...
## $ Internet                       <dbl> 51.0, 79.5, 79.8, 5.0, 78.0, 45.0, 5...
## $ EPI                            <dbl> 59.02, NA, 63.21, NA, 61.21, 49.96, ...
## $ geo                            <chr> "arg", "aus", "aut", "bgd", "bel", "...
## $ four_regions                   <chr> "americas", "asia", "europe", "asia"...
## $ eight_regions                  <chr> "america_south", "east_asia_pacific"...
## $ six_regions                    <chr> "america", "east_asia_pacific", "eur...
## $ Latitude                       <dbl> -34.00000, -25.00000, 47.33333, 24.0...
## $ Longitude                      <dbl> -64.00000, 135.00000, 13.33333, 90.0...
## $ `World bank income group 2017` <chr> "Upper middle income", "High income"...

Estamos interessados na relação entre quanto as pessoas de diferentes países comentam em questões dos outros. A proporção das pessoas do país que comentou nas questões de outros está medido na variável comentaram_prop.

Considerando essa variável, queremos examinar a relação entre ela e o quão hierárquicas são as relações em um país (PDI). Queremos também levar em conta o quanto as pessoas daquele país têm acesso à Internet (Internet) e qual o tamanho da base de dados que detectamos daquele país (usuarios).

Examinando essa relação

Faça uma visualização que usa os princípios de eficácia no projeto de visualizações para facilitar as comparações que você acha que são as mais importantes para entendermos esse contexto.

Considerando apenas uma visualição, temos:

dados %>%
    ggplot(aes(
        x = PDI,
        y = comentaram_prop,
        color = Internet,
        size = log10(usuarios)
    )) +
    geom_point(alpha = .6)

A partir da imagens acima podemos perceber que os países com mais acesso a internet (pontos mais claros) e com uma menor desigualdade social percebida (Menores valores PDI) possuem uma maior proporção de comentários registrados, enquanto países com menos acesso a internet(pontos escuros) e com maiores valores de PDI registraram uma menor proporção de comentários. Em relação aos quantidade de usuários, não é possível perceber diferenças a partir desta visualização.

Para entender melhor as relações entre as variáveis,vamos aplicar uma análise de correlação avaliando cada caso separadamento com base na proporção de comentários.

  1. Comentários por país X PDI(Power Distance Index):
dados %>% ggplot( aes(x=PDI , y=comentaram_prop)) +
    geom_point() +
    scale_y_continuous(name = "Proporção de Comentários")+
    scale_x_continuous(name = "Power Distance Index(PDI)")+
    geom_smooth(method='lm', formula= y~x, se = FALSE)

Para evitar interferência de outliers, vamos limitar o escopo da análise de correlação para valores de PDI menor ou igual a 100 e a proporção de comentários para valores inferiores a 0.4, então:

dados.filter1 = dados %>% filter(PDI <=100 & comentaram_prop <=0.4)

corrPDI = dados.filter1 %>% summarise(
    pearson = cor(PDI,comentaram_prop,method ="pearson"),
    spearman = cor(PDI,comentaram_prop,method ="spearman"),
    kendall = cor(PDI,comentaram_prop, method = "kendall")
    )

corrPDI
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1  -0.619   -0.625  -0.454

Com base nos coeficientes de correlação, podemos afirmar que há uma relação moderada inversa(negativa) entre a proporção de comentários de usuários de um país e o seu PDI, isto é, quanto menor a desigualdade social percebida em um país, maior é a proporção de comentários registrados.

2.Comentários por país X Acesso a Internet

Manipulando os dados disponíveis, encontramos 3 amostras que não possuem informações sobre a taxa de acesso a internet, sendo assim, vamos remove-las da análise.

dados %>% filter(is.na(Internet))
## # A tibble: 3 x 21
##   site  country   PDI   IDV   MAS   UAI usuarios responderam_prop
##   <chr> <chr>   <dbl> <dbl> <dbl> <dbl>    <dbl>            <dbl>
## 1 Stac~ Taiwan     58    17    45    69     1341            0.398
## 2 Stac~ Venezu~    81    12    73    76      686            0.453
## 3 Supe~ Taiwan     58    17    45    69      225            0.151
## # ... with 13 more variables: perguntaram_prop <dbl>, editaram_prop <dbl>,
## #   comentaram_prop <dbl>, GNI <dbl>, Internet <dbl>, EPI <dbl>, geo <chr>,
## #   four_regions <chr>, eight_regions <chr>, six_regions <chr>, Latitude <dbl>,
## #   Longitude <dbl>, `World bank income group 2017` <chr>
dados.filter2 = dados %>% filter(!is.na(Internet))

dados.filter2 %>% ggplot( aes(x=Internet , y=comentaram_prop)) +
    geom_point() +
    scale_y_continuous(name = "Proporção de Comentários")+
    scale_x_continuous(name = "Acesso a Internet")+
    geom_smooth(method='lm', formula= y~x, se = FALSE)

Novamente, vamos considerar amostras com uma proporção de comentários maior que 0.4 como sendo outliers, então:

dados.filter2 = dados.filter2 %>% filter(comentaram_prop <=0.4)

corrInternet = dados.filter2 %>% summarise(
    pearson = cor(Internet,comentaram_prop,method ="pearson"),
    spearman = cor(Internet,comentaram_prop,method ="spearman"),
    kendall = cor(Internet,comentaram_prop, method = "kendall")
    )

corrInternet
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.635    0.633   0.475

Com isso, podemos afirmar que a proporção de comentários por país possui uma relação moderada com a taxa de acesso de Internet, ou seja, quanto mais acessível for a internet para uma população, maior a quantidade de comentários registrados.

  1. Comentários por país X Quantidade de Usuários:
dados %>% ggplot( aes(x=usuarios , y=comentaram_prop)) +
    geom_point() +
    scale_y_continuous(name = "Proporção de Comentários")+
    scale_x_continuous(name = "Quantidade de Usuários")+
    geom_smooth(method='lm', formula= y~x, se = FALSE)

Podemos ver claramente a presença de outliers na quantidade de usuários, sendo assim, vamos considerar amostras com uma quantidade de usuários menor que 7,5 mil usuários, e amostras com uma proporção de comentários menor que 0.4 como sendo outliers, então:

dados.filter3 = dados %>% filter(comentaram_prop <=0.4 & usuarios <=7500)

corrUser = dados.filter3 %>% summarise(
    pearson = cor(usuarios,comentaram_prop,method ="pearson"),
    spearman = cor(usuarios,comentaram_prop,method ="spearman"),
    kendall = cor(usuarios,comentaram_prop, method = "kendall")
    )

corrUser
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.196    0.226   0.154

Como os coeficientes de correlação estão todos próximos de zero, não podemos dizer que existe uma relação entre a quantidade de usuários de um país e a proporção de comentários registrados.

Outras formas de ver

Em seguida, faça 5 visualizações que usem as mesmas variáveis e também pontos, mas que sejam menos eficazes que a que você escolheu acima.

1.Coordenada Polar: Adotar difenrentes coordenadas pode confundir o leitor

dados %>%
    ggplot(aes(
        x = PDI,
        color = Internet,
        y = comentaram_prop,
        size = log10(usuarios)
    )) +
    geom_point() + 
    coord_polar()

  1. Correlograma: Muita informação em uma imagem
df = dados %>% select(comentaram_prop,Internet,PDI,usuarios) %>% filter(!is.na(Internet))

df = df %>% mutate(usuarios = log10(usuarios)) 

ggpairs(df, title="Correlogram")

  1. PCA (análise de componentes principais): Requer que o leitor compreenda o método PCA.
pca_res <- prcomp(df, scale. = TRUE)

autoplot(pca_res,loadings= TRUE, loadings.label = TRUE)

  1. Grid: Divide os dados em grid de acordo com categórias. Porém esta análise utiliza 4 variáveis contínuas, sendo assim, uma quinta variável categorica foi necessária.
dados %>%
    ggplot(aes(
        x = PDI,
        y = comentaram_prop,
        color = Internet,
        size = log10(usuarios)
    )) +
    geom_point(alpha = .6) + 
    facet_grid(site ~ ., scales = "free_y")

  1. Gráfico 3D: visualização um pouco mais complexa.
fig <- plot_ly(x = dados$PDI, y = dados$comentaram_prop, z = dados$Internet,marker = list(color = log10(dados$usuarios), colorscale ='Blues', showscale = TRUE,size =4))

fig <- fig %>% add_markers()
fig <- fig %>% layout(scene = list(xaxis = list(title = 'PDI'),
                                   yaxis = list(title = 'Proporção Comentarios'),
                                   zaxis = list(title = 'Acesso a Internet')),
                      annotations = list(
                        x = 1.13,
                        y = 1.05,
                        text = 'Usuários',
                        xref = 'paper',
                        yref = 'paper',
                        showarrow = FALSE
                        ))


fig
## Warning: Ignoring 3 observations

Bônus

Inclua o continente dos países (six_regions) na visualização.

df2 = dados %>% select(comentaram_prop,Internet,PDI,usuarios,six_regions) %>%
    filter(!is.na(Internet)) %>% filter(!is.na(six_regions))

df2 %>%
    ggplot(aes(
        x = PDI,
        y = comentaram_prop,
        color = Internet,
        size = log10(usuarios)
    )) +
    geom_point(alpha = .6)+
    facet_wrap(. ~six_regions, ncol=3)